home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 21
/
CU Amiga Magazine's Super CD-ROM 21 (1998)(EMAP Images)(GB)[!][issue 1998-04].iso
/
CUCD
/
Utilities
/
DTConvert
/
misc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-06-23
|
4KB
|
198 lines
/*
**
** $VER: misc.c 1.4 (23.6.97)
** datatypes.library/Examples/DTConvert
**
** Converts file into another format using datatypes
**
** Misc functions
**
** Written 1996/97 by Roland 'Gizzy' Mainz
**
*/
/* project includes */
#include "DTConvert.h"
struct Node *GetNumNode( struct List *list, ULONG num )
{
struct Node *cur = NULL;
ULONG currnum = 0UL;
if( list )
{
for( cur = list -> lh_Head ; cur -> ln_Succ ; cur = cur -> ln_Succ )
{
if( currnum++ == num ) break;
}
if( !(cur -> ln_Succ) ) cur = NULL;
}
return( cur );
}
void mysprintf( STRPTR buffer, STRPTR fmt, ... )
{
APTR args;
args = (APTR)((&fmt) + 1);
RawDoFmt( fmt, args, (void (*))"\x16\xc0\x4e\x75", buffer );
}
APTR AllocVecPooled( APTR poolheader, ULONG memsize )
{
ULONG *memory;
memsize += sizeof( ULONG );
if( memory = (ULONG *)AllocPooled( poolheader, memsize ) )
{
*memory = memsize;
memory++;
}
return( (APTR)memory );
}
void FreeVecPooled( APTR poolheader, APTR mem )
{
ULONG *memory;
if( mem )
{
memory = (ULONG *)mem;
memory--;
FreePooled( poolheader, memory, (*memory) );
}
}
STRPTR GetLockName( BPTR lock, STRPTR name )
{
ULONG buffsize = 64UL;
STRPTR buff = NULL;
LONG ioerr = 0L;
ULONG namelen = ((name)?(strlen( name )):(0UL));
for( ;; )
{
/* Allocate buffer for path, name and '/' */
if( buff = (STRPTR)AllocVec( (buffsize + namelen + 16UL), (MEMF_PUBLIC | MEMF_CLEAR) ) )
{
if( NameFromLock( lock, buff, (buffsize - 1UL) ) )
{
break;
}
else
{
ioerr = IoErr();
FreeVec( (APTR)buff );
buff = NULL;
if( ioerr == ERROR_LINE_TOO_LONG )
{
buffsize *= 2UL;
}
else
{
break;
}
}
}
}
if( buff )
{
if( name )
{
if( !AddPart( buff, name, (buffsize + namelen + 14UL) ) )
{
FreeVec( buff );
buff = NULL;
}
}
}
else
{
SetIoErr( ioerr );
}
return( buff );
}
void AttemptOpenLibrary( struct Library **library, STRPTR title, STRPTR libname, ULONG libversion )
{
struct EasyStruct LibNotFoundES,
LibWrongVersionES;
LibNotFoundES . es_StructSize = sizeof( struct EasyStruct );
LibNotFoundES . es_Flags = 0UL;
LibNotFoundES . es_Title = title;
LibNotFoundES . es_TextFormat = "%s\nnot found.";
LibNotFoundES . es_GadgetFormat = "Retry|Cancel";
LibWrongVersionES . es_StructSize = sizeof( struct EasyStruct );
LibWrongVersionES . es_Flags = 0UL;
LibWrongVersionES . es_Title = title;
LibWrongVersionES . es_TextFormat = "Requires at least\n%s version %lu";
LibWrongVersionES . es_GadgetFormat = "Cancel";
if( (*library) == NULL )
{
for( ;; )
{
/* attemp to open shared library */
(*library) = OpenLibrary( libname, 0UL );
if( (*library) )
{
/* check if we got at least "libversion" version of shared library */
if( ((*library) -> lib_Version) < libversion )
{
(void)EasyRequest( NULL, (&LibWrongVersionES), 0UL, libname, libversion );
CloseLibrary( (*library) );
(*library) = NULL;
}
break;
}
/* prompt the user */
if( EasyRequest( NULL, (&LibNotFoundES), 0UL, libname ) == 0L )
{
/* user canceled */
break;
}
}
}
}
void ClearMsgPort( struct MsgPort *port )
{
struct Message *msg;
while( msg = GetMsg( port ) )
{
ReplyMsg( msg );
}
}